<template>
  <section class="msite">
    <!--首页头部-->
    <Header :title="address.address">
      <span
        class="header_search"
        slot="left"
        @click="$router.replace('/search')"
      >
        <i class="iconfont icon-sousuo"></i>
      </span>
      <span class="header_login" slot="right">
        <span
          class="header_login_text"
          @click="$router.replace('/profile')"
          v-if="userInfo._id"
        >
          <i class="iconfont icon-user"></i>
        </span>
        <span
          class="header_login_text"
          @click="$router.replace('/login')"
          v-else
          >登录|注册</span
        >
      </span>
    </Header>
    <!--首页导航-->
    <nav class="msite_nav">
      <div ref="sc1" class="swiper-container" v-if="categorys.length > 0">
        <div class="swiper-wrapper">
          <div
            class="swiper-slide"
            v-for="(categorys, index) in categorysArr1"
            :key="index"
          >
            <div
              class="link_to_food"
              v-for="(cs, index) in categorys"
              :key="index"
            >
              <div class="food_container">
                <img :src="'https://fuss10.elemecdn.com' + cs.image_url" />
              </div>
              <span>{{ cs.title }}</span>
            </div>
          </div>
        </div>
        <!-- <div class="swiper-button-prev swiper-button" @click="slidePrev"></div> -->
        <!-- <div class="swiper-button-next swiper-button" @click="slideNext"></div> -->
        <!-- Add Pagination -->
        <div class="swiper-pagination"></div>
      </div>
      <div v-else><img src="./images/msite_back.svg" alt="" /></div>
    </nav>
    <!--首页附近商家-->
    <div class="msite_shop_list">
      <div class="shop_header">
        <i class="iconfont icon-xuanxiang"></i>
        <span class="shop_header_title">附近商家</span>
      </div>
      <div class="shop_container">
        <ul class="shop_list" v-if="shops.length > 0">
          <li
            class="shop_li border-1px"
            v-for="(shop, index) in shops"
            :key="shop.id"
            @click="$router.push(`/shop/${shop.id}`)"
          >
            <a>
              <div class="shop_left">
                <img
                  class="shop_img"
                  :src="'https://fuss10.elemecdn.com' + shop.image_path"
                />
              </div>
              <div class="shop_right">
                <section class="shop_detail_header">
                  <h4 class="shop_title ellipsis">{{ shop.name }}</h4>
                  <ul class="shop_detail_ul">
                    <!-- <li class="supports">保</li>
                    <li class="supports">准</li> -->
                    <li
                      class="supports"
                      v-for="(support, index) in shop.supports"
                      :key="support.id"
                    >
                      {{ support.icon_name }}
                    </li>
                  </ul>
                </section>
                <section class="shop_rating_order">
                  <section class="shop_rating_order_left">
                    <div class="star star-24">
                      <span class="star-item on"></span>
                      <span class="star-item on"></span>
                      <span class="star-item on"></span>
                      <span class="star-item on"></span>
                      <span class="star-item off"></span>
                    </div>
                    <div class="rating_section">{{ shop.rating }}</div>
                    <div class="order_section">
                      月售{{ shop.recent_order_num }}单
                    </div>
                  </section>
                  <section class="shop_rating_order_right">
                    <span class="delivery_style delivery_right">俊哥专送</span>
                  </section>
                </section>
                <section class="shop_distance">
                  <p class="shop_delivery_msg">
                    <span>¥{{ shop.float_minimum_order_amount }}起送</span>
                    <span class="segmentation">/</span>
                    <span>{{ shop.piecewise_agent_fee.tips }}</span>
                  </p>
                </section>
              </div>
            </a>
          </li>
        </ul>
        <ul v-else>
          <li>
            <img src="./images/shop_back.svg" alt="" />
          </li>
          <li>
            <img src="./images/shop_back.svg" alt="" />
          </li>
          <li>
            <img src="./images/shop_back.svg" alt="" />
          </li>
          <li>
            <img src="./images/shop_back.svg" alt="" />
          </li>
        </ul>
      </div>
    </div>
  </section>
</template>

<script type="text/ecmascript-6">
import Swiper from "swiper";
// import _ from "lodash"; //全局引入
import chunk from "lodash/chunk"; //按需引入
import "swiper/css/swiper.min.css";
import { mapState } from "vuex";

export default {
  computed: {
    // ...mapState(["address", "categorys", "shops", "userInfo"]), //通过mapState辅助函数帮助我们生成计算属性，传入的数组里的值是vuex中state里的值  address等价于下面address()
    ...mapState({
      address: (state) => state.msite.address,
      categorys: (state) => state.msite.categorys,
      shops: (state) => state.msite.shops,
      userInfo: (state) => state.user.userInfo,
    }),
    // address() {
    //   return this.$store.state.address.address;
    // },

    /* 
       根据一维数组生成二维数组
       包含所有分类的二维数组
       内部小数组的长度最大是8
    */
    /*  categorysArr() {//自己做法
      const { categorys } = this;
      let categorysArr = [];
      categorys.forEach((item, index) => {
        //遍历categorys内的数据
        const num = parseInt(index / 8); //num相当于页码的索引值第0页，第一页...
        if (!categorysArr[num]) {
          categorysArr[num] = []; //判断categorysArr[num]是否存在
        }
        categorysArr[num].push(item); //若存在将item（数据的内容）添加到categorysArr内
      });
      return categorysArr;
    }, */

    categorysArr1() {
      // 用库做法
      const { categorys } = this;
      // return _.chunk(categorys, 8);
      return chunk(categorys, 8); // 好处：只打包引入的工具函数
    },
  },
  mounted() {
    //  分发异步action，得到后台响应数据后保存到vuex中(通知actions异步获取address状态并保存)
    this.$store.dispatch("getAddress");
    this.$store.dispatch("getFoodCategorys", () => {
      this.$nextTick(() => {
        new Swiper(this.$refs.sc1, {
          //swiper对象必须在列表数据显示之后才创建，所以在mounted()里面创建swiper对象
          loop: true, // 循环模式选项
          autoplay: true, //自动播放
          // 如果需要分页器
          pagination: {
            el: ".swiper-pagination",
          },
        });
      });
    });

    this.$store.dispatch("getShops");
    // this.$store.dispatch("getFoodCategorys");
    //使用swiper库实现轮播图
    // this.swiper = new Swiper(".swiper-container", {
    // this.swiper = new Swiper(this.$refs.sc1, {
    //   //swiper对象必须在列表数据显示之后才创建，所以在mounted()里面创建swiper对象
    //   loop: true, // 循环模式选项
    //   autoplay: true, //自动播放
    //   // 如果需要分页器
    //   pagination: {
    //     el: ".swiper-pagination",
    //   },
    // });
  },
  watch: {
    /* watch：
    1.更新数据
    2.立即同步调用监视回调函数
    3.异步更新界面
    */
    // categorys(value) {
    //   //监听categorys变化：[]===>[...]
    //   // 将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它，然后等待 DOM 更新。
    //   this.$nextTick(() => {
    //     this.swiper = new Swiper(this.$refs.sc1, {
    //       //swiper对象必须在列表数据显示之后才创建，所以在mounted()里面创建swiper对象
    //       loop: true, // 循环模式选项
    //       autoplay: true, //自动播放
    //       // 如果需要分页器
    //       pagination: {
    //         el: ".swiper-pagination",
    //       },
    //     });
    //   });
    // },
  },
};
</script>

<style lang="stylus" rel="stylesheet/stylus">
@import '../../common/stylus/mixins.styl'
.msite // 首页
  width 100%
  .msite_nav
    bottom-border-1px(#e4e4e4)
    margin-top 45px
    height 200px
    background #fff
    .swiper-container
      width 100%
      height 100%
      .swiper-wrapper
        width 100%
        height 100%
        .swiper-slide
          display flex
          flex-wrap wrap
          .link_to_food
            width 25%
            .food_container
              display block
              width 100%
              text-align center
              padding-bottom 10px
              font-size 0
              img
                display inline-block
                width 50px
                height 50px
            span
              display block
              width 100%
              text-align center
              font-size 13px
              color #666
      .swiper-pagination
        >span.swiper-pagination-bullet-active
          background #02a774
  .msite_shop_list
    top-border-1px(#e4e4e4)
    margin-top 10px
    background #fff
    .shop_header
      padding 10px 10px 0
      .shop_icon
        margin-left 5px
        color #999
      .shop_header_title
        color #999
        font-size 14px
        line-height 20px
    .shop_container
      margin-bottom 50px
      .shop_list
        .shop_li
          bottom-border-1px(#f1f1f1)
          width 100%
          >a
            clearFix()
            display block
            box-sizing border-box
            padding 15px 8px
            width 100%
            .shop_left
              float left
              box-sizing border-box
              width 23%
              height 75px
              padding-right 10px
              .shop_img
                display block
                width 100%
                height 100%
            .shop_right
              float right
              width 77%
              .shop_detail_header
                clearFix()
                width 100%
                .shop_title
                  float left
                  width 200px
                  color #333
                  font-size 16px
                  line-height 16px
                  font-weight 700
                  &::before
                    content '品牌'
                    display inline-block
                    font-size 11px
                    line-height 11px
                    color #333
                    background-color #ffd930
                    padding 2px 2px
                    border-radius 2px
                    margin-right 5px
                .shop_detail_ul
                  float right
                  margin-top 3px
                  .supports
                    float left
                    font-size 10px
                    color #999
                    border 1px solid #f1f1f1
                    padding 0 2px
                    border-radius 2px
              .shop_rating_order
                clearFix()
                width 100%
                margin-top 18px
                margin-bottom 8px
                .shop_rating_order_left
                  float left
                  color #ff9a0d
                  .star // 2x图 3x图
                    float left
                    font-size 0
                    .star-item
                      display inline-block
                      background-repeat no-repeat
                    &.star-48
                      .star-item
                        width 20px
                        height 20px
                        margin-right 22px
                        background-size 20px 20px
                        &:last-child
                          margin-right 0
                        &.on
                          bg-image('./images/stars/star48_on')
                        &.half
                          bg-image('./images/stars/star48_half')
                        &.off
                          bg-image('./images/stars/star48_off')
                    &.star-36
                      .star-item
                        width 15px
                        height 15px
                        margin-right 6px
                        background-size 15px 15px
                        &:last-child
                          margin-right 0
                        &.on
                          bg-image('./images/stars/star36_on')
                        &.half
                          bg-image('./images/stars/star36_half')
                        &.off
                          bg-image('./images/stars/star36_off')
                    &.star-24
                      .star-item
                        width 10px
                        height 10px
                        margin-right 3px
                        background-size 10px 10px
                        &:last-child
                          margin-right 0
                        &.on
                          bg-image('./images/stars/star24_on')
                        &.half
                          bg-image('./images/stars/star24_half')
                        &.off
                          bg-image('./images/stars/star24_off')
                  .rating_section
                    float left
                    font-size 10px
                    color #ff6000
                    margin-left 4px
                  .order_section
                    float left
                    font-size 10px
                    color #666
                    transform scale(0.8)
                .shop_rating_order_right
                  float right
                  font-size 0
                  .delivery_style
                    transform-origin 35px 0
                    transform scale(0.7)
                    display inline-block
                    font-size 12px
                    padding 1px
                    border-radius 2px
                  .delivery_left
                    color #fff
                    margin-right -10px
                    background-color #02a774
                    border 1px solid #02a774
                  .delivery_right
                    color #02a774
                    border 1px solid #02a774
              .shop_distance
                clearFix()
                width 100%
                font-size 12px
                .shop_delivery_msg
                  float left
                  transform-origin 0
                  transform scale(0.9)
                  color #666
                .segmentation
                  color #ccc
</style>
